/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package annuairebikfaya;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/**
 *
 * @author pfares
 */
public class Annuaire implements IAnnuaire {
    private Map<Personne,IListeNumTel> annuaire_;
    public Annuaire() {
        //Pour utiliser treeMap Personne a besoin d'etre comparable
        annuaire_ = new TreeMap<Personne, IListeNumTel>();
    }

    public boolean ajouterEntree(Personne p, IListeNumTel nums) {
         annuaire_.put(p, nums);
         return true;
    }
    /**
    public Set<Personne> entreesPourChaine(String s1){
        ((TreeMap<Personne, IListeNumTel>)annuaire_).
    }
     */
    public void ajouterNumeroFin(Personne p, NumTel n) {
        IListeNumTel l = annuaire_.get(p);
        l.ajouterFin(n);

    }
    public void ajouterNumeroDebut(Personne p, NumTel n) {
        IListeNumTel l = annuaire_.get(p);
        l.ajouterDebut(n);
    }
    /**
     * retourne le premier numéro d'une personne, si la personne n'est pas dans
     * l'annuaire retourne null.
     * @param p la personne dont on recherche le numéro
     * @return son numero, <code>null</code> si p n'est pas présente dans l'annuaire.
     */
    public NumTel premierNumero(Personne p) {
        IListeNumTel l = annuaire_.get(p);
        return l.premierNumero();
    }
    /**
     * retourne la liste des numéros d'une personne si la personne est absente
     * retourne null
     * @param o la personne pour laquelle on consulte les numeros.
     * @return la liste des numéros de la personne si celle-ci est présente dans
     *         l'annuaire, <code>null</code> sinon.
     */
    public IListeNumTel numeros(Personne p) {
        return annuaire_.get(p);

    }
    /**
     * renvoie un iterateur sur l'ensemble des personnes contenues dans l'annuaire
     * @return l'iterateur
     */
    public Iterator<Personne> personnes(){
        return annuaire_.keySet().iterator();

    }
    /**
     * affiche l'intégralité de l'annuaire, sous la forme d'une personne par ligne
     * suivie de ses numéros de téléphone.
     */
    public void afficher(){
        for (Personne p: annuaire_.keySet()) {
            System.out.print(p+"==>");
            System.out.println(annuaire_.get(p));
        }
        /**
        Iterator<Personne> ip = personnes();
        while (ip.hasNext()) {
            Personne p = ip.next();
            System.out.print(p+"==>");
            System.out.println(annuaire_.get(p));
        }
         */

    }
    @Override
    public String toString() {
        String res="";
        for (Personne p: annuaire_.keySet()) {
            res = res + p.toString();
            res += annuaire_.get(p).toString()+"\n";
            //res += "\n";
        }
        return res;
    }
    /**
     * supprime une personne de l'annuaire. Sans effet si la persoone n'est pas
     * présente dans l'annuaire.
     * @param p la personne à retirer de l'annuaire.
     */
    public void supprimer(Personne p){
             annuaire_.remove(p);
    }

    /**
     * supprime un numero donné pour une personne.<BR>
     * Si ce numéro est le seul numéro pour la  personne, la personne est
     * alors retirée de l'annuaire.<BR>
     * Sans effet si la personne n'est pas présente dans l'annuaire.
     * @param p la personne pour laquelle un numéro doit être supprimé.
     * @param n le numero a supprimer.
     */
    public void supprimer(Personne p, int n) {
             annuaire_.get(p).retirer(n);
    }
}
